<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 通过在子类构造函数中调用父类构造函数来实现继承。这样，子类实例可以独立拥有父类的属性。
        function Parent(name) {
            this.name = name;
            this.colors = ['red', 'blue', 'green'];
        }

        Parent.prototype.say = function () {
            console.log('我是父类')
        }

        function Child(name, age) {
            Parent.call(this, name); // 借用 Parent 构造函数
            this.age = age;
        }

        const child1 = new Child('Child1', 10);
        const child2 = new Child('Child2', 20);

        child1.colors.push('black');

        console.log(child1.colors); // 输出 ['red', 'blue', 'green', 'black']
        console.log(child2.colors); // 输出 ['red', 'blue', 'green']

        // 特点：
            // 每个实例都有自己的父类属性副本，不会相互影响。
        // 缺点：
            // 子类无法继承父类原型上的属性和方法
    </script>
</body>
</html>